package com.pb.wkflow.core.utils;

import com.pb.wkflow.api.exception.ApprovalException;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

/**
 * @author 苗益辉
 * @date 2022/5/16 17:03
 */
public class ExpressionUtil {

    /**
     * 按照 ${xxx} 替换 参数
     * @param variables 流程变量
     * @param str 字符传
     * @return string
     */
    public static String getVariablesValue(Map<String, Object> variables, String str) {
        String text = "";
        if(isExpression(str)) {
            text = str.substring(str.indexOf("${") + 2, str.indexOf("}", str.indexOf("}")));
        }else {
            return str;
        }
        Object variable = variables.get(text);
        if(variable == null) {
            throw new ApprovalException("找不到流程变量"+ str);
        }
        if(!(variable instanceof String)) {
            throw new ApprovalException("流程变量不是字符串"+ str);
        }
        return (String) variable;
    }

    /**
     * 判断字符串是否以$开头
     * @param str 字符串
     * @return boolean
     */
    public static boolean isExpression(String str) {
        if(StringUtils.isBlank(str)) {
            return false;
        }else {
            str = str.trim();
            return str.startsWith("${");
        }
    }
}
